home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
comm2
/
termsorc.lha
/
Extras
/
Source
/
gtlayout-source.lha
/
LTP_Spread.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-24
|
4KB
|
162 lines
/* GadTools layout toolkit
**
** Copyright © 1993-1995 by Olaf `Olsen' Barthel
** Freely distributable.
*/
#include "gtlayout_global.h"
VOID __regargs
LTP_Spread(LayoutHandle *Handle,ObjectNode *Group,LONG Width,LONG Height)
{
ObjectNode *Node;
LONG Count;
Count = 0;
SCANGROUP(Group,Node)
{
Count++;
}
if(Group -> Special . Group . Horizontal)
{
LONG Room = Width - Group -> Width,Left,Width,i = 0;
if(Count > 1)
{
Left = 0;
Room += --Count * Handle -> InterWidth;
}
else
Left = Room / 2;
SCANGROUP(Group,Node)
{
if(!LIKE_STRING_KIND(Node) || Node -> Special . String . LinkID == -1)
{
Width = Node -> Width;
switch(Node -> LabelPlace)
{
case PLACE_LEFT:
if(Node -> Type == MX_KIND)
{
Left += Node -> Special . Radio . LabelWidth + INTERWIDTH;
if(Node -> Label)
{
if(Node -> Special . Radio . TitlePlace == PLACETEXT_LEFT)
Left += Node -> LabelWidth + INTERWIDTH;
else
Width += INTERWIDTH + Node -> LabelWidth;
}
}
else
Left += Node -> LabelWidth + INTERWIDTH;
break;
case PLACE_RIGHT:
if(Node -> Type == MX_KIND)
{
Width += INTERWIDTH + Node -> Special . Radio . LabelWidth;
if(Node -> Label)
{
if(Node -> Special . Radio . TitlePlace == PLACETEXT_LEFT)
Left += Node -> LabelWidth + INTERWIDTH;
else
Width += INTERWIDTH + Node -> LabelWidth;
}
}
else
Width += INTERWIDTH + Node -> LabelWidth;
break;
}
if(Node -> Type == LISTVIEW_KIND && Node -> Special . List . ExtraLabelWidth)
Left += Node -> Special . List . ExtraLabelWidth + INTERWIDTH;
if(Node -> Type == SLIDER_KIND)
{
if(Node -> Special . Slider . LevelPlace == PLACETEXT_RIGHT)
Width += INTERWIDTH + Node -> Special . Slider . LevelWidth;
if(Node -> Special . Slider . LevelPlace == PLACETEXT_LEFT && Node -> LabelPlace != PLACE_LEFT)
Left += INTERWIDTH + Node -> Special . Slider . LevelWidth;
}
#ifdef DO_LEVEL_KIND
if(Node -> Type == LEVEL_KIND)
{
if(Node -> Special . Level . LevelPlace == PLACETEXT_RIGHT)
Width += INTERWIDTH + Node -> Special . Level . MaxLevelWidth;
if(Node -> Special . Level . LevelPlace == PLACETEXT_LEFT && Node -> LabelPlace != PLACE_LEFT)
Left += INTERWIDTH + Node -> Special . Level . MaxLevelWidth;
}
#endif /* DO_LEVEL_KIND*/
Node -> Left = Left;
Left += Width + ((Room * (i + 1)) / Count - (Room * i) / Count);
i++;
}
}
}
else
{
LONG Room = Height - Group -> Height,Height,Top,y,i = 0;
if(Count > 1)
{
Top = 0;
Room += --Count * Handle -> InterHeight;
}
else
Top = Room / 2;
SCANGROUP(Group,Node)
{
if(!LIKE_STRING_KIND(Node) || Node -> Special . String . LinkID == -1)
{
if(Count++)
{
if(Node -> ExtraSpace > 0)
y = Top + Node -> ExtraSpace * Handle -> InterHeight;
else
{
if(Node -> ExtraSpace < 0)
y = Top - Node -> ExtraSpace;
else
y = Top + Handle -> InterHeight;
}
}
else
y = Top;
if(Node -> LabelPlace == PLACE_ABOVE)
y += Handle -> RPort . TxHeight + INTERHEIGHT;
Node -> Top = y;
if(Node -> LabelPlace == PLACE_BELOW && Node -> Label)
Height = Node -> Height + INTERHEIGHT + Handle -> RPort . TxHeight;
else
Height = Node -> Height;
Top = y + Height + ((Room * (i + 1)) / Count - (Room * i) / Count);
i++;
}
}
}
}